Die CRC-Berechnung wird für die Fehlererkennung bei der Datenübertragung verwendet. Das Ergebnis einer Berechnung liefert einen CRC-Wert über die gesendeten Daten. Der Empfänger erkennt eine fehlerhafte Übertragung aufgrund des ungleichen CRC-Werts. Die Funktion LGF_CalcCRC16Advanced verwendet als Generatorpolynom (Maske) 16 Bit sowie die Parameter finalXorValue, reflectInput und reflectResult.
| LGF_CalcCRC16Advanced (FC) | ||||||||
|---|---|---|---|---|---|---|---|---|
| Word | initValue | Ret_Val | Word | |||||
| Word | mask | error | Bool | |||||
| Word | finalXorValue | status | Word | |||||
| Bool | reflectInput | |||||||
| Bool | reflectResult | |||||||
| UInt | noOfElements | |||||||
| Array[*] of Byte | array | Array[*] of Byte | ||||||
| Bezeichner | Datentyp | Beschreibung |
|---|---|---|
| initValue | Word | Startwert, mit dem die Berechnung durchgeführt wird. Wenn keinen Startwert notwendig ist - 16#00 zuweisen. |
| mask | Word | Generatorpolynom, mit dem die Berechnung durchgeführt wird. (Maske / CRC Polynom) |
| finalXorValue | Word | Wert, mit dem am Ende eine weitere XOR-Operation durchgeführt wird |
| reflectInput | Bool | TRUE: wird die Reihenfolge der Bits innerhalb des Eingangsbytes gespiegelt. Aus der Reihenfolge 0…7 wird 7…0. |
| reflectResult | Bool | TRUE: wird die Reihenfolge der Bits innerhalb des Ergebnisses gespiegelt. Aus der Reihenfolge 0…7 wird 7…0. |
| noOfElements | UInt | Anzahl der Elemente, die in der CRC-Berechnung verwendet werden 0 = alle Elemente / das gesamte Array |
| Bezeichner | Datentyp | Beschreibung |
|---|---|---|
| Ret_Val | Word | Berechneter CRC-Wert (Rückgabewert der Funktion). |
| error | Bool | FALSE: Kein Fehler / TRUE: Während der Ausführung des FB ist ein Fehler aufgetreten |
| status | Word | 16#0000-16#7FFF: Status des FB / 16#8000-16#FFFF: Fehleridentifikation (siehe folgende Tabelle) |
| Bezeichner | Datentyp | Beschreibung |
|---|---|---|
| array | Array[*] of Byte | Datenstrom, für den der CRC-Wert berechnet werden soll. |
| Code / Wert | Bezeichner / Beschreibung |
|---|---|
| 16#0000 | STATUS_NO_ERROR Kein Fehler beim Aufruf der Funktion aufgetreten |
| 16#8400 | ERR_NO_OF_ELEMENTS Fehler aufgrund eines undefinierten Zustands in der Zustandsmaschine |
Die Funktion berechnet aus einem beliebig großen Datenstrom den CRC-Wert. Der Datenstrom setzt sich aus den einzelnen Elementen des Arrays am Ein- / Ausgangsparameter array zusammen. Der Startwert initValue und das Generatorpolynom mask sind frei wählbar.
Über die booleschen Eingangsparameter reflectInput und reflectResult können Sie optional die Bits der Eingangsdaten bzw. des CRC-Werts spiegeln. Außerdem wird mit dem CRC-Wert am Ende und dem Wert finalXorValue eine XOR-Operation durchgeführt.
Mit dem Eingang noOfELements kann die gewünschte Anzahl an Elementen zur Berechnung vorgegeben werden, es gilt:
AnzahlElemente <= (ArrayObergrenze - ArrayUntergrenze + 1)
mask (Polynom) und initValue (Initial Value) unterstützt:| Version & Datum | Änderungsbeschreibung | |
|---|---|---|
| 1.0.0 | Simatic Systems Support | |
| 16.12.2019 | first release, copied from "LGF_CalcCRC32Advanced" | |
| 3.0.0 | Simatic Systems Support | |
| 23.04.2020 | Set version to V3.0.0, harmonize the version of the whole library | |
| 3.0.1 | Simatic Systems Support | |
| 12.11.2020 | Insert documentation Assign default start values to optional inputs - `initValue`, `mask`, `finalXorValue`, `reflectInput`, `reflectResult` | |
| 3.1.0 | Simatic Systems Support | |
| 14.04.2023 | Add input `noOfElements` to assign length to be converted different from array size Add outputs `error` and `status` display a wrong assignment to `noOfElements` | |